package com.lw.entity;

import com.lw.common.vo.BasePageQuery;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

/**
 * 通知公告表 实体类。
 *
 * @author lw
 * @since 2025年05月15日 00:14:58
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "通知公告表")
@Table("tb_notice")
public class TbNotice extends BasePageQuery implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Id(keyType = KeyType.Auto)
    @Schema(description = "")
    private Long id;

    /**
     * 通知标题
     */
    @Schema(description = "通知标题")
    private String title;

    /**
     * 通知内容
     */
    @Schema(description = "通知内容")
    private String content;

    /**
     * 通知类型（关联字典编码：notice_type）
     */
    @Schema(description = "通知类型（关联字典编码：notice_type）")
    private Integer type;

    /**
     * 通知等级（字典code：notice_level）
     */
    @Schema(description = "通知等级（字典code：notice_level）")
    private String level;

    /**
     * 目标类型（1: 全体, 2: 指定）
     */
    @Schema(description = "目标类型（1: 全体, 2: 指定）")
    private Integer targetType;

    /**
     * 目标人ID集合（多个使用英文逗号,分割）
     */
    @Schema(description = "目标人ID集合（多个使用英文逗号,分割）")
    private String targetUserIds;

    /**
     * 发布人ID
     */
    @Schema(description = "发布人ID")
    private Long publisherId;

    @Schema(description = "发布人姓名", hidden = true)
    @Column(ignore = true)
    private String publisherName;

    /**
     * 发布状态（0: 未发布, 1: 已发布, -1: 已撤回）
     */
    @Schema(description = "发布状态（0: 未发布, 1: 已发布, -1: 已撤回）")
    private Integer publishStatus;

    /**
     * 发布时间
     */
    @Schema(description = "发布时间")
    private LocalDateTime publishTime;

    /**
     * 撤回时间
     */
    @Schema(description = "撤回时间")
    private LocalDateTime revokeTime;

    /**
     * 创建人ID
     */
    @Schema(description = "创建人ID")
    private Long createBy;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @Column(onInsertValue = "now()")
    private LocalDateTime createTime;

    /**
     * 更新人ID
     */
    @Schema(description = "更新人ID")
    private Long updateBy;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @Column(onUpdateValue = "now()")
    private LocalDateTime updateTime;

    /**
     * 是否删除（0: 未删除, 1: 已删除）
     */
    @Schema(description = "是否删除（0: 未删除, 1: 已删除）")
    private Boolean isDeleted;

}
